﻿using System;
using System.Collections.Generic;
using System.Linq;
using GigaSite.Domain.Entities;
using GigaSite.Domain.Interfaces.Repositories;

namespace GigaSite.Web.Areas.Catalog.Models
{
    /// <summary>
    /// Модель объявления
    /// </summary>
    public class AdsModel
    {
        /// <summary>
        /// Создает новую модель объявления на основе доменной модели
        /// </summary>
        /// <param name="ads">Объявление</param>
        /// <param name="imagesRepository">Репозиторий изображений</param>
        public AdsModel(Adv ads, IImagesRepository imagesRepository)
        {
            Id = ads.Id;
            Title = ads.Title;
            Content = ads.Content;
            Views = ads.Views;
            Email = ads.Email;
            Phone = ads.Phones;
            Author = ads.User;
            DateCreated = ads.DateCreated;
            DateModified = ads.DateModified;
            Price = ads.Price;
            Images = ads.AdvImages.Select(i => imagesRepository.GetFullImageURL(i.ImageURI));
        }

        /// <summary>
        /// Простой конструктор
        /// </summary>
        public AdsModel()
        {
        }

        /// <summary>
        /// Номер объявления
        /// </summary>
        public long Id { get; set; }

        /// <summary>
        /// Заголовок
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        /// Содержимое объявления
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        /// Количество просмотров
        /// </summary>
        public int Views { get; set; }

        /// <summary>
        /// Ссылки на картинки
        /// </summary>
        public IEnumerable<string> Images { get; set; }

        /// <summary>
        /// Email
        /// </summary>
        public string Email { get; set; }

        /// <summary>
        /// Телефон
        /// </summary>
        public string Phone { get; set; }

        /// <summary>
        /// Автор
        /// </summary>
        public User Author { get; set; }

        /// <summary>
        /// Цена
        /// </summary>
        public double? Price { get; set; }

        /// <summary>
        /// Дата создания объявления
        /// </summary>
        public DateTime? DateCreated { get; set; }

        /// <summary>
        /// Дата модификации объявления
        /// </summary>
        public DateTime? DateModified { get; set; }

        /// <summary>
        /// Возвращает дату обновления объявления
        /// </summary>
        /// <returns></returns>
        public string GetDateUpdated()
        {
            DateTime actualDate = DateCreated.Value;
            if (DateModified.HasValue)
            {
                actualDate = DateModified.Value;
            }
            return actualDate.ToShortDateString();
        }
    }
}